home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / lib / python2.4 / site-packages / wifiping.pyc (.txt) < prev    next >
Python Compiled Bytecode  |  2006-03-29  |  6KB  |  182 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.4)
  3.  
  4. import os
  5. import sys
  6. import getopt
  7. import struct
  8. import re
  9. import string
  10.  
  11. try:
  12.     import psyco
  13.     psyco.full()
  14. except ImportError:
  15.     print 'Psyco optimizer not installed, running anyway...'
  16.  
  17. from socket import *
  18. from fcntl import ioctl
  19. from select import select
  20. from scapy import Raw, Ether, PrismHeader, Dot11, Dot11WEP, LLC, SNAP, sendp, conf
  21. from scapy import IP, ICMP
  22. IN_IFACE = 'ath0'
  23. OUT_IFACE = 'ath0'
  24. HAS_PRISM = 1
  25. WEP = 0
  26. KEYID = 0
  27. DEBUG = 0
  28. VERB = 0
  29. TTL = 64
  30. BSSID = ''
  31. UBSSID = ''
  32. WEPKEY = ''
  33.  
  34. def usage(status = 0):
  35.     print 'Usage: wifitap -b <BSSID> [-t <TTL>] [-o <iface>] [-i <iface> [-p]]'
  36.     print '                          [-w <WEP key> [-k <key id>]] [-d [-v]]'
  37.     print '                          [-h]'
  38.     print '     -b <BSSID>    specify BSSID for injection'
  39.     print '     -t <TTL>      Set TTL (default: 64)'
  40.     print '     -o <iface>    specify interface for injection (default: ath0)'
  41.     print '     -i <iface>    specify interface for listening (default: ath0)'
  42.     print '     -p            listening interface does not provide Prism Headers'
  43.     print '     -w <key>      WEP mode and key'
  44.     print '     -k <key id>   WEP key id (default: 0)'
  45.     print '     -d            activate debug'
  46.     print '     -v            verbose debugging'
  47.     print '     -h            this so helpful output'
  48.     sys.exit(status)
  49.  
  50. opts = getopt.getopt(sys.argv[1:], 'b:o:i:w:k:t:pdvh')
  51. for opt, optarg in opts[0]:
  52.     if opt == '-b':
  53.         UBSSID = optarg
  54.         continue
  55.     if opt == '-o':
  56.         OUT_IFACE = optarg
  57.         continue
  58.     if opt == '-i':
  59.         IN_IFACE = optarg
  60.         continue
  61.     if opt == '-p':
  62.         HAS_PRISM = 0
  63.         continue
  64.     if opt == '-w':
  65.         WEP += 1
  66.         WEPKEY = optarg
  67.         continue
  68.     if opt == '-k':
  69.         KEYID = int(optarg)
  70.         continue
  71.     if opt == '-t':
  72.         TTL = int(optarg)
  73.         continue
  74.     if opt == '-d':
  75.         DEBUG += 1
  76.         continue
  77.     if opt == '-v':
  78.         VERB += 1
  79.         continue
  80.     if opt == '-h':
  81.         usage()
  82.         continue
  83.  
  84. if not UBSSID:
  85.     print '\nError: BSSID not defined\n'
  86.     usage()
  87.  
  88. if re.match('^([0-9a-fA-F]{2}:){5}[0-9a-fA-F]{2}$', UBSSID):
  89.     for i in range(17):
  90.         BSSID += UBSSID[i].lower()
  91.     
  92. else:
  93.     print '\nError: Wrong format for BSSID\n'
  94.     usage()
  95. if HAS_PRISM:
  96.     print 'IN_IFACE:   %s (Prism headers in capture)' % IN_IFACE
  97. else:
  98.     print 'IN_IFACE:   %s (no Prism headers in capture)' % IN_IFACE
  99. print 'OUT_IFACE:  %s' % OUT_IFACE
  100. print 'BSSID:      %s' % BSSID
  101. if WEP:
  102.     tmp_key = ''
  103.     if re.match('^([0-9a-fA-F]{2}){5}$', WEPKEY) or re.match('^([0-9a-fA-F]{2}){13}$', WEPKEY):
  104.         tmp_key = WEPKEY
  105.     elif re.match('^([0-9a-fA-F]{2}[:]){4}[0-9a-fA-F]{2}$', WEPKEY) or re.match('^([0-9a-fA-F]{2}[:]){12}[0-9a-fA-F]{2}$', WEPKEY):
  106.         tmp_key = re.sub(':', '', WEPKEY)
  107.     elif re.match('^([0-9a-fA-F]{4}[-]){2}[0-9a-fA-F]{2}$', WEPKEY) or re.match('^([0-9a-fA-F]{4}[-]){6}[0-9a-fA-F]{2}$', WEPKEY):
  108.         tmp_key = re.sub('-', '', WEPKEY)
  109.     else:
  110.         print '\nError : Wrong format for WEP key\n'
  111.         usage()
  112.     
  113.     g = lambda x: chr(int(tmp_key[::2][x], 16) * 16 + int(tmp_key[1::2][x], 16))
  114.     for i in range(len(tmp_key) / 2):
  115.         conf.wepkey += g(i)
  116.     
  117.     print 'WEP key:    %s (%dbits)' % (WEPKEY, len(tmp_key) * 4)
  118.     if KEYID > 3 or KEYID < 0:
  119.         print 'Key id:     %s (defaulted to 0 due to wrong -k argument)' % KEYID
  120.         KEYID = 0
  121.     else:
  122.         print 'Key id:     %s' % KEYID
  123. elif KEYID != 0:
  124.     print 'WEP not activated, key id ignored'
  125.  
  126. print 'TTL:        %s' % TTL
  127. if not DEBUG:
  128.     if VERB:
  129.         print 'DEBUG not activated, verbosity ignored'
  130.     
  131. else:
  132.     print 'DEBUG activated'
  133.     if VERB:
  134.         print 'Verbose debugging'
  135.     
  136. conf.iface = OUT_IFACE
  137. if HAS_PRISM:
  138.     s = conf.L2listen(iface = IN_IFACE, filter = 'link[144]&0xc == 8 and link[145]&0xf == 1')
  139. else:
  140.     s = conf.L2listen(iface = IN_IFACE, filter = 'link[0]&0xc == 8 and link[1]&0xf == 1')
  141.  
  142. try:
  143.     while None:
  144.         dot11_frame = s.recv(2346)
  145.         if DEBUG and VERB:
  146.             if dot11_frame.haslayer(Dot11WEP):
  147.                 os.write(1, 'Received WEP from %s\n' % IN_IFACE)
  148.             else:
  149.                 os.write(1, 'Received from %s\n' % IN_IFACE)
  150.         
  151.         if dot11_frame.getlayer(Dot11).addr1 != BSSID:
  152.             continue
  153.         
  154.         if dot11_frame.haslayer(ICMP) and dot11_frame.getlayer(ICMP).type == 8:
  155.             if DEBUG:
  156.                 os.write(1, 'Received ICMP Echo Request on %s\n' % IN_IFACE)
  157.                 if VERB:
  158.                     os.write(1, '%s\n' % dot11_frame.summary())
  159.                 
  160.             
  161.             dot11_answer = Dot11(type = 'Data', FCfield = 'from-DS', addr1 = dot11_frame.getlayer(Dot11).addr2, addr2 = BSSID, addr3 = dot11_frame.getlayer(Dot11).addr3)
  162.             if WEP:
  163.                 dot11_answer.FCfield |= 64
  164.                 dot11_answer /= Dot11WEP(iv = '111', keyid = KEYID)
  165.             
  166.             dot11_answer /= LLC(ctrl = 3) / SNAP() / IP(src = dot11_frame.getlayer(IP).dst, dst = dot11_frame.getlayer(IP).src, ttl = TTL)
  167.             dot11_answer /= ICMP(type = 'echo-reply', id = dot11_frame.getlayer(ICMP).id, seq = dot11_frame.getlayer(ICMP).seq)
  168.             dot11_answer /= dot11_frame.getlayer(ICMP).payload
  169.             if DEBUG:
  170.                 os.write(1, 'Sending ICMP Echo Reply on %s\n' % OUT_IFACE)
  171.                 if VERB:
  172.                     os.write(1, '%s\n' % dot11_answer.summary())
  173.                 
  174.             
  175.             sendp(dot11_answer, verbose = 0)
  176.             continue
  177. except KeyboardInterrupt:
  178.     print 'Stopped by user.'
  179.  
  180. s.close()
  181. sys.exit()
  182.